/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MODELO;

import java.io.*;
import java.util.List;
import javax.swing.*;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
import jxl.*;

public class DAOEntidadExportar {

    private File archi;
    private List<JTable> tabla;
    private List<String> nom_hoja;
    private WritableCellFormat fomato_fila;
    private WritableCellFormat fomato_columna;

    public DAOEntidadExportar(List<JTable> tab, File ar) throws Exception {
        this.archi = ar;
        this.tabla = tab;
        if (tab.size() < 0) {
            throw new Exception("ERROR");
        }
    }

    public boolean export() {
        try {
            DataOutputStream out = new DataOutputStream(new FileOutputStream(archi));
            WritableWorkbook w = Workbook.createWorkbook(out);
            w.createSheet("REPORTE DIRESA", 0);
            WritableSheet s = w.getSheet(0);
            int saltofila = 2;
            int saltocolumna = 0;
            for (int index = 0; index < tabla.size(); index++) {
                JTable table = tabla.get(index);
                switch (index) {
                    case 0:
                        //creamos la columna maestra
                       // String Columnamaestra = "INFORME MENSUAL DE LA PRODUCCION DEL PROGRAMA DE SALUD MATERNA PERINATAL "+"I. ATENCION PRENATAL REENFOCADA:";
                         String Columnamaestra = "I. ATENCION PRENATAL REENFOCADA:";
                          createColumnaMaestra(s, index, saltocolumna + 1, Columnamaestra);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j+1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 1:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 2:
                        //creamos la columna maestra
                        String Columnamaestra2 = "II. ADMINISTRACION DE SULFATO FERROSO:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra2);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 3:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;

                        saltocolumna = 0;
                        break;
                    case 4:
                        //creamos la columna maestra
                        String Columnamaestra3 = "III. ATENCION DE ABORTO INCOMPLETO:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra3);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 5:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 6:
                        //creamos la columna maestra
                        String Columnamaestra4 = "IV. ATENCION DEL PARTO:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra4);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 7:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 2;
                        saltocolumna = 0;
                        break;
                    case 8:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 9:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 2;
                        saltocolumna = 0;
                        break;
                    case 10:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 11:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 12:
                        //creamos la columna maestra
                        String Columnamaestra7 = "V. MORBILIDAD MATERNA:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra7);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 13:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 14:
                        //creamos la columna maestra
                        String Columnamaestra8 = "VII. MORBILIDAD DEL RECIEN NACIDO:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra8);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 15:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 16:
                        //creamos la columna maestra
                        String Columnamaestra9 = "VII. ATENCION DEL PUERPUERIO";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra9);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 17:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 18:
                        //creamos la columna maestra
                        String Columnamaestra10 = "VIII. REFERENCIAS OBSTETRICAS Y NEONATALES:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra10);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 19:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 20:
                        //creamos la columna maestra
                        String Columnamaestra11 = "IX. VISITA DOMICILIARIA:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra11);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 21:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 22:
                        //creamos la columna maestra
                        String Columnamaestra12 = "X. CASA EN ESPERA";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra12);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 23:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 24:
                        //creamos la columna maestra
                        String Columnamaestra13 = "XI. MUERTES MATERNAS:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra13);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 25:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 26:
                        //creamos la columna maestra
                        String Columnamaestra14 = "XII. MUERTES PERINATALES:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra14);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 27:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                    case 28:
                        //creamos la columna maestra
                        String Columnamaestra15 = "XIII. TRANSMISION VERTICAL:";
                        createColumnaMaestra(s, saltofila - 2, saltocolumna + 1, Columnamaestra15);
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltocolumna = table.getColumnCount();
                        break;
                    case 29:
                        for (int i = 0; i < table.getColumnCount(); i++) {
                            createColumna(s, saltofila, saltocolumna + i, table.getColumnName(i));//crea la columna
                            for (int j = 0; j < table.getRowCount(); j++) {
                                Object objeto = table.getValueAt(j, i);
                                createFila(s, (j + 1) + saltofila, saltocolumna + i, String.valueOf(objeto));//crea las filas
                            }
                        }
                        saltofila = saltofila + table.getRowCount() + 5;
                        saltocolumna = 0;
                        break;
                }
            }
            w.write();
            w.close();
            out.close();
            return true;

        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (WriteException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    private void createColumna(WritableSheet sheet, int fila, int columna, String name_columna) throws WriteException {
        //creamos el tipo de letra
        WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);
        // definimos el formato d ela celda
       WritableCellFormat times = new WritableCellFormat(times10pt);
        
        // Permite si se ajusta autom�ticamente a las c�lulas
        //times.setWrap(true);
        // crea una negrita con subrayado
        WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.TAHOMA, 10, WritableFont.BOLD, false, UnderlineStyle.SINGLE);
        fomato_columna = new WritableCellFormat(times10ptBoldUnderline);
        // Permite que se ajusta autom�ticamente a las c�lulas
        //fomato_columna.setWrap(true);
        CellView cv = new CellView();
        cv.setSize(220);
        cv.setDimension(70);
        cv.setFormat(times);
        cv.setFormat(fomato_columna);
        //cv.setAutosize(true);
        // escribimos las columnas
        addColumna(sheet, fila, columna, name_columna, fomato_columna);//numero de columna , 0 es la fila
    }
private void createColumnaMaestra(WritableSheet sheet, int fila, int columna, String name_columna) throws WriteException {
        //creamos el tipo de letra
        WritableFont times10pt = new WritableFont(WritableFont.ARIAL, 14);
        // definimos el formato d ela celda
        WritableCellFormat times = new WritableCellFormat(times10pt);
        // Permite si se ajusta autom�ticamente a las c�lulas
        //times.setWrap(true);
        // crea una negrita con subrayado
        WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.SINGLE,Colour.ORANGE);
        fomato_columna = new WritableCellFormat(times10ptBoldUnderline);
        // Permite que se ajusta autom�ticamente a las c�lulas
        //fomato_columna.setWrap(true);
        CellView cv = new CellView();
        cv.setSize(220);
        cv.setDimension(70);
        cv.setFormat(times);
        cv.setFormat(fomato_columna);
        //cv.setAutosize(true);
        // escribimos las columnas
        addColumna(sheet, fila, columna, name_columna, fomato_columna);//numero de columna , 0 es la fila
    }
    /**
     * *************************************
     */
    private void createFila(WritableSheet sheet, int fila, int columna, String name_fila) throws WriteException {
        //creamos el tipo de letra
        WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);
        times10pt.setColour(Colour.GOLD);
        // definimos el formato d ela celda
        WritableCellFormat times = new WritableCellFormat(times10pt);
        times.setBorder(Border.TOP, BorderLineStyle.MEDIUM, Colour.GOLD);
        // Permite si se ajusta autom�ticamente a las c�lulas
        //times.setWrap(true);
        // crea una negrita con subrayado
        WritableFont times10ptBoldUnderline = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE);
        fomato_fila = new WritableCellFormat(times10ptBoldUnderline);
        // Permite que se ajusta autom�ticamente a las c�lulas
       // fomato_fila.setWrap(true);
        CellView cv = new CellView();
        cv.setDimension(70);
        cv.setFormat(times);
        cv.setFormat(fomato_fila);
        //cv.setAutosize(true);
        // escribimos las columnas
        addFilas(sheet, fila, columna, name_fila, fomato_fila);
    }

    /**
     * ********************************
     */
    private void addColumna(WritableSheet sheet, int row, int column, String s, WritableCellFormat format) throws RowsExceededException, WriteException {
        Label label;
        label = new Label(column, row, s, format);
        sheet.addCell(label);
    }

    private void addFilas(WritableSheet sheet, int row, int column, String s, WritableCellFormat format) throws WriteException, RowsExceededException {
        Label label;
        label = new Label(column, row, s, format);
        sheet.addCell(label);
    }

    /*  public void llama_excel()
     {
     try {
     Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+"DATOS_EXPORTADOS.xls");
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     }
     /*******************************/
    /*
         
     */
}
